﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace GuestList.Models
{
    [Serializable]
    public class Invitation : NotifyPropertyChanged
    {
        Person _primaryGuest = null;
        ObservableCollection<Person> _otherGuests = new ObservableCollection<Person>();
        string _address1 = string.Empty;
        string _address2 = string.Empty;
        string _city = "Salt Lake City";
        string _zipCode = "84";
        string _state = "UT";
        InvitationType _invitationType = InvitationType.ReceptionOnly;
        string _comment = string.Empty;
        string _giftDescription = string.Empty;
        bool _haveSentThankYou = false;
        string _relation = string.Empty;
        decimal _weight = 1m;
        bool _havePrintedInvitation = false;

        public Person PrimaryGuest
        {
            get { return _primaryGuest; }
            set
            {
                _primaryGuest = value;
                Notify("PrimaryGuest");
            }
        }

        public ObservableCollection<Person> OtherGuests
        {
            get { return _otherGuests; }
            set
            {
                _otherGuests = value;
                Notify("OtherGuests");
            }
        }

        public string Address1
        {
            get { return _address1; }
            set
            {
                _address1 = value;
                Notify("Address1");
            }
        }

        public string Address2 
        {
            get { return _address2; }
            set
            {
                _address2 = value;
                Notify("Address2");
            }
        }

        public string City 
        {
            get { return _city; }
            set
            {
                _city = value;
                Notify("City");
            }
        }

        public string State 
        {
            get { return _state; }
            set
            {
                _state = value;
                Notify("State");
            }
        }

        public string ZipCode
        {
            get { return _zipCode; }
            set
            {
                _zipCode = value;
                Notify("ZipCode");
            }
        }

        public InvitationType InvitationType
        {
            get { return _invitationType; }
            set
            {
                _invitationType = value;
                Notify("InvitationType");
            }
        }

        public string Comment
        {
            get { return _comment; }
            set
            {
                _comment = value;
                Notify("Comment");
            }
        }

        public string GiftDescription
        {
            get { return _giftDescription; }
            set
            {
                _giftDescription = value;
                Notify("GiftDescription");
            }
        }

        public bool HaveSentThankYou
        {
            get { return _haveSentThankYou; }
            set
            {
                _haveSentThankYou = value;
                Notify("HaveSentThankYou");
            }
        }

        public string Relation
        {
            get { return _relation; }
            set
            {
                _relation = value;
                Notify("Relation");
            }
        }

        public decimal Weight
        {
            get { return _weight; }
            set
            {
                _weight = value;
                Notify("Weight");
            }
        }

        public bool HavePrintedInvitation
        {
            get { return _havePrintedInvitation; }
            set
            {
                _havePrintedInvitation = value;
                Notify("HavePrintedInvitation");
            }
        }
    }
}
